/* INICIALIZADOR */

#define _SVID_SOURCE 1        /* Requerido por algunos gcc */
#include <stdio.h>
#include <stdlib.h>
#include </root/Desktop/semaforos.h>

int main() {
 int semidHfruta, semidHcrema, semidVasos, semidticket, semidServirHF, semidServirHC, semidDespachar;
 int idsem_Hfruta = 1;
 int idsem_Hcrema = 2;
 int idsem_Vasos = 3;
 int idsem_ticket = 4;
 int idsem_ServirHF = 5;
 int idsem_ServirHC = 6;
 int idsem_Despachar = 7;
 int idsem_8 = 8;
 int idsem_9 = 9;

 char msj[128];

	/* eliminar todos los semaforos existentes */

	sprintf(msj,"Elimino todos los semaforos, shared memory y colas sin utilizar\n");
	write(fileno(stdout), msj, strlen(msj));

	system("/root/Desktop/delscripts.sh");

	/* crear los semafros que se usan en el sistema */
 

/* Creo los semaforo para los helados */

	semidHfruta = creasem(idsem_Hfruta);
	sprintf(msj,"Semaforo Hfruta ID: %d\n", semidHfruta);
	write(fileno(stdout), msj, strlen(msj));

	semidHcrema = creasem(idsem_Hcrema);
	sprintf(msj,"Semaforo Hcrema ID: %d\n", semidHcrema);
	write(fileno(stdout), msj, strlen(msj));

/* Creo los semaforo para los vasos */

	semidVasos = creasem(idsem_Vasos);
	sprintf(msj,"Semaforo Vasos ID: %d\n", semidVasos);
	write(fileno(stdout), msj, strlen(msj));

/* Creo el semaforo para determinar el numero de ticket */
	semidticket = creasem(idsem_ticket);

/* DEBUG, DESUSO */
	if (semidticket == -1)
	{
		/* DEBUG
		perror("");
		printf("Errno = %d.\n", errno);
		*/
		sprintf(msj,"El semaforo ya se encuentra creado...\n");
		write(fileno(stdout), msj, strlen(msj));

		/* Si el semaforo ya esta creado adquiro los derechos y el numero de semaforo */
		semidticket = getsem(idsem_ticket);
		if (semidticket == -1)
		{
			sprintf(msj,"Error al adquirir derechos sobre el semaforo");
			write(fileno(stdout), msj, strlen(msj));		
		}
 	} 
	else 
	{
	/* Si el semaforo no habia sido creado, lo inicializo */
		if (inisem(semidticket, TRUE) == -1)
		{
			sprintf(msj,"Error al inicializar el semaforo: %d", semidticket);
			write(fileno(stdout), msj, strlen(msj));
	        	exit(1);
		}
	}
/* DEBUG, DESUSO */

	sprintf(msj,"Semaforo tickets ID: %d\n", semidticket);
	write(fileno(stdout), msj, strlen(msj));

/* Creo los semaforo para los servir el helado de fruta, crema y el despachador */

	semidServirHF = creasem(idsem_ServirHF);
	sprintf(msj,"Semaforo ServirHF ID: %d\n", semidServirHF);
	write(fileno(stdout), msj, strlen(msj));

	semidServirHC = creasem(idsem_ServirHC);
	sprintf(msj,"Semaforo ServirHC ID: %d\n", semidServirHC);
	write(fileno(stdout), msj, strlen(msj));

	semidDespachar = creasem(idsem_Despachar);
	sprintf(msj,"Semaforo Despachar ID: %d\n", semidDespachar);
	write(fileno(stdout), msj, strlen(msj));

/* Creo los semaforo y shared memory 8, donde cada uno levanta si ya termino */


}

